// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.expr.SQLCharExpr_ptr;
// import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr_ptr;
// import com.alibaba.druid.sql.ast.statement.SQLAlterStatement;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "MySqlStatementImpl.h"
#include "../../../../ast/statement/SQLAlterStatement.h"

class MySqlAlterUserStatement_AuthOption
{
public:
  SQLCharExpr_ptr authString;

  SQLCharExpr_ptr getAuthString();

  void setAuthString(SQLCharExpr_ptr authString);
};

class MySqlAlterUserStatement_AlterUser
{
public:
  SQLExpr_ptr user;
  MySqlAlterUserStatement_AuthOption_ptr authOption;

  SQLExpr_ptr getUser();

  void setUser(SQLExpr_ptr user);

  MySqlAlterUserStatement_AuthOption_ptr getAuthOption();

  void setAuthOption(MySqlAlterUserStatement_AuthOption_ptr authOption);
};

class MySqlAlterUserStatement_PasswordOption
{
public:
  MySqlAlterUserStatement_PasswordExpire_ptr expire;
  SQLIntegerExpr_ptr intervalDays;

  MySqlAlterUserStatement_PasswordExpire_ptr getExpire();

  void setExpire(MySqlAlterUserStatement_PasswordExpire_ptr expire);

  SQLIntegerExpr_ptr getIntervalDays();

  void setIntervalDays(SQLIntegerExpr_ptr intervalDays);
};

class MySqlAlterUserStatement_PasswordExpire
{
public:
  static MySqlAlterUserStatement_PasswordExpire_ptr PASSWORD_EXPIRE;
  static MySqlAlterUserStatement_PasswordExpire_ptr PASSWORD_EXPIRE_DEFAULT;
  static MySqlAlterUserStatement_PasswordExpire_ptr PASSWORD_EXPIRE_NEVER;
  static MySqlAlterUserStatement_PasswordExpire_ptr PASSWORD_EXPIRE_INTERVAL;
  MySqlAlterUserStatement_PasswordExpire(uint64_t mask, string_ptr name);
  string_ptr name;
  uint64_t mask;
};

class MySqlAlterUserStatement : virtual public MySqlStatementImpl, virtual public SQLAlterStatement
{
public:
  BOOL_ptr ifExists;

  MySqlAlterUserStatement_AlterUser_list_ptr alterUsers;

  MySqlAlterUserStatement_PasswordOption_ptr passwordOption;

  MySqlAlterUserStatement();
  SHAREDOBJECT(MySqlAlterUserStatement);
  
  void accept0(MySqlASTVisitor_ptr visitor);

  BOOL_ptr isIfExists();

  void setIfExists(BOOL_ptr ifExists);

  SQLExpr_list_ptr getUsers();

  MySqlAlterUserStatement_AlterUser_list_ptr getAlterUsers();

  MySqlAlterUserStatement_PasswordOption_ptr getPasswordOption();

  void setPasswordOption(MySqlAlterUserStatement_PasswordOption_ptr passwordOption);
};
